﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Deo.Negocios;
using System.Net.Mail;
using System.Configuration;
using System.Net;

namespace MakeIT.Deo.Apresentacao
{
    public partial class MeuCadastro : System.Web.UI.Page
    {
        cliente clienteVO = null;
        string captcha = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            Util.logAcesso("Meu Cadastro", null, null, null, null);
            
            if (!this.IsPostBack)
            {
                this.PanelRegiao.Visible = true;
                this.PanelPF.Visible = false;
                this.PanelPJ.Visible = false;
                this.PanelOK.Visible = false;

                this.clienteVO = (cliente)this.Session["customerActive"];
                if (clienteVO!=null)
                {
                    this.tbUF.Text = this.clienteVO.Estado;
                    this.rblTipo.SelectedValue = this.clienteVO.Tipo;
                    this.rblMalaDireta.SelectedValue = (this.clienteVO.MalaDireta.Value ? "Sim" : "Nao");
                    this.rblSexo.SelectedValue = this.clienteVO.Sexo;
                    this.tbBairro.Text = this.clienteVO.Bairro;
                    this.tbCel.Text = this.clienteVO.FoneCel;
                    this.tbCEP.Text = this.clienteVO.CEP;
                    this.tbCid.Text = this.clienteVO.Cidade;
                    this.tbCompl.Text = this.clienteVO.EnderCompl;
                    this.tbCPF.Text = this.clienteVO.CPF;
                    this.tbEnd.Text = this.clienteVO.Endereco;
                    this.tbFone.Text = this.clienteVO.FoneRes;
                    this.tbMail.Text = this.clienteVO.Email;
                    this.tbNascimento.Text = this.clienteVO.Nasc.Value.ToShortDateString();
                    this.tbNome.Text = this.clienteVO.Nome;
                    this.tbNumero.Text = this.clienteVO.EnderNum;
                    this.tbRG.Text = this.clienteVO.RG;
                    this.tbSobrenome.Text = clienteVO.Sobrenome;
                    this.tbUF2.Text = this.tbUF.Text;

                    this.rblSexoPJ.SelectedValue = this.clienteVO.Sexo;
                    this.tbBairroPJ.Text = this.clienteVO.Bairro;
                    this.tbCelPJ.Text = this.clienteVO.FoneCel;
                    this.tbCEPPJ.Text = this.clienteVO.CEP;
                    this.tbCidPJ.Text = this.clienteVO.Cidade;
                    this.tbComplPJ.Text = this.clienteVO.EnderCompl;
                    this.tbCPFPJ.Text = this.clienteVO.CPF;
                    this.tbEndPJ.Text = this.clienteVO.Endereco;
                    this.tbFoneComlPJ.Text = this.clienteVO.FoneComl;
                    this.tbMailPJ.Text = this.clienteVO.Email;
                    this.tbNascimentoPJ.Text = this.clienteVO.Nasc.Value.ToShortDateString();
                    this.tbNomePJ.Text = this.clienteVO.Nome;
                    this.tbNumeroPJ.Text = this.clienteVO.EnderNum;
                    this.tbSobrenomePJ.Text = clienteVO.Sobrenome;
                    this.tbUF2PJ.Text = this.tbUF.Text;

                    this.tbUser.Text = this.clienteVO.User;

                }
            }
        }

        protected void ImageMapBrasil_Click(object sender, ImageMapEventArgs e)
        {
            this.tbUF.Text = e.PostBackValue;
        }


        protected void ButtonProximo_Click(object sender, EventArgs e)
        {
            if (this.PanelRegiao.Visible)
            {
                this.PanelRegiao.Visible = false;
                this.PanelPF.Visible = true && this.rblTipo.SelectedValue.Equals("PF");
                this.PanelPJ.Visible = true && this.rblTipo.SelectedValue.Equals("PJ");
                this.PanelUsuario.Visible = false;
                this.PanelOK.Visible = false;
                this.tbUF2.Text = this.tbUF.Text;
                this.tbUF2PJ.Text = this.tbUF.Text;
            }
            else if (this.PanelPF.Visible || this.PanelPJ.Visible)
            {
                this.PanelRegiao.Visible = false; 
                this.PanelPF.Visible = false;
                this.PanelPJ.Visible = false;
                this.PanelUsuario.Visible = true;
                this.PanelOK.Visible = false;
            }
            else if (this.PanelUsuario.Visible)
            {
                this.PanelRegiao.Visible = false;
                this.PanelPF.Visible = false;
                this.PanelPJ.Visible = false;
                this.PanelUsuario.Visible = false;
                this.PanelOK.Visible = true;
            }
        }

        protected void ButtonAnterior_Click(object sender, EventArgs e)
        {
            if (this.PanelUsuario.Visible)
            {
                this.PanelRegiao.Visible = false;
                this.PanelPF.Visible = true && this.rblTipo.SelectedValue.Equals("PF");
                this.PanelPJ.Visible = true && this.rblTipo.SelectedValue.Equals("PJ");
                this.PanelUsuario.Visible = false;
                this.PanelOK.Visible = false;
            } 
            else if (this.PanelPF.Visible || this.PanelPJ.Visible)
            {
                this.PanelRegiao.Visible = true;
                this.PanelPF.Visible = false;
                this.PanelPJ.Visible = false;
                this.PanelOK.Visible = false;
                this.PanelOK.Visible = false;
            }
        }

        protected void ButtonSalvar_Click(object sender, EventArgs e)
        {
            try {
                if (rblTipo.SelectedValue.Equals("PF"))
                    DateTime.Parse(this.tbNascimento.Text);
                else
                    DateTime.Parse(this.tbNascimentoPJ.Text);
            }
            catch (Exception ex)
            {
                Util.ExibeAlert(this, "Data de nascimento incorreta.");
                this.PanelRegiao.Visible = false;
                this.PanelPF.Visible = true && this.rblTipo.SelectedValue.Equals("PF");
                this.PanelPJ.Visible = true && this.rblTipo.SelectedValue.Equals("PJ");
                this.PanelUsuario.Visible = false;
                this.PanelOK.Visible = false;
                this.tbNascimento.Focus();
                return;
            }

            if (!this.tbSenha.Text.Equals(this.tbSenha2.Text))
            {
                Util.ExibeAlert(this, "Senha e confirmação de senha não conferem, digite-as novamente.");
                this.PanelRegiao.Visible = false;
                this.PanelPF.Visible = false;
                this.PanelPJ.Visible = false;
                this.PanelUsuario.Visible = true;
                this.PanelOK.Visible = false;
                this.tbSenha.Focus();
                return;
            }
            if (this.tbSenha.Text.Trim().Length < 5)
            {
                Util.ExibeAlert(this, "Senha muito curta, deve ter no minimo 5 letras e/ou números.");
                this.PanelRegiao.Visible = false;
                this.PanelPF.Visible = false;
                this.PanelPJ.Visible = false;
                this.PanelUsuario.Visible = true;
                this.PanelOK.Visible = false;
                this.tbSenha.Focus();
                return;
            }
            
            captcha = (string)this.Session["captcha"];
            if (!captcha.Equals(this.TextBoxCaptcha.Text.ToUpper()))
            {
                Util.ExibeAlert(this, "Código de segurança incorreto.");
                this.PanelRegiao.Visible = false;
                this.PanelPF.Visible = false;
                this.PanelPJ.Visible = false;
                this.PanelUsuario.Visible = true;
                this.PanelOK.Visible = false;
                this.TextBoxCaptcha.Focus();
                return;
            }

            ClienteBO cBO = new ClienteBO();
            this.clienteVO = (cliente)this.Session["customerActive"];
            
            if (this.clienteVO == null || !this.clienteVO.User.Equals(this.tbUser.Text))
            {
                List<cliente> lcVO = cBO.RecuperaCliente(null, null, this.tbUser.Text, null, true, null);
                if (lcVO!=null && lcVO.Count > 0)
                {
                    Util.ExibeAlert(this, "Este nome de usuário já esta em uso, por favor escolha outro.");
                    this.PanelRegiao.Visible = false;
                    this.PanelPF.Visible = false;
                    this.PanelPJ.Visible = false;
                    this.PanelUsuario.Visible = true;
                    this.PanelOK.Visible = false;
                    this.tbUser.Focus();
                    return;
                }
            }

            if (this.clienteVO == null)
            {
                this.clienteVO = new cliente();
            }
            else
            {
                this.clienteVO = cBO.RecuperaCliente(clienteVO.IdCliente);
            }
            bool pf = this.rblTipo.SelectedValue.Equals("PF");

            this.clienteVO.Ativo = true;
            this.clienteVO.Tipo = this.rblTipo.SelectedValue; 
            this.clienteVO.MalaDireta = this.rblMalaDireta.SelectedValue.Equals("Sim");
            this.clienteVO.Sexo = (pf?this.rblSexo.SelectedValue:this.rblSexoPJ.SelectedValue);
            this.clienteVO.Nome = (pf?this.tbNome.Text:this.tbNomePJ.Text);
            this.clienteVO.Sobrenome = (pf?this.tbSobrenome.Text:this.tbSobrenomePJ.Text);
            this.clienteVO.NomePJ = this.tbEmpresa.Text;
            this.clienteVO.Nasc = DateTime.Parse((pf?this.tbNascimento.Text:this.tbNascimentoPJ.Text));
            this.clienteVO.CNPJ = this.tbCNPJ.Text;
            this.clienteVO.CPF = (pf?this.tbCPF.Text:this.tbCPFPJ.Text);
            this.clienteVO.RG = this.tbRG.Text;
            this.clienteVO.Email = (pf?this.tbMail.Text:this.tbMailPJ.Text);
            this.clienteVO.Endereco = (pf?this.tbEnd.Text:this.tbEndPJ.Text);
            this.clienteVO.EnderNum = (pf?this.tbNumero.Text:this.tbNumeroPJ.Text);
            this.clienteVO.EnderCompl = (pf?this.tbCompl.Text:this.tbCompl.Text);
            this.clienteVO.Bairro = (pf?this.tbBairro.Text:this.tbBairroPJ.Text);
            this.clienteVO.Cidade = (pf?this.tbCid.Text:this.tbCidPJ.Text);
            this.clienteVO.Estado = this.tbUF.Text;
            this.clienteVO.CEP = (pf?this.tbCEP.Text:this.tbCEPPJ.Text);
            this.clienteVO.FoneCel = (pf?this.tbCel.Text:this.tbCelPJ.Text);
            this.clienteVO.FoneComl = this.tbFoneComlPJ.Text;
            this.clienteVO.FoneRes = this.tbFone.Text;
            this.clienteVO.User = this.tbUser.Text;
            this.clienteVO.Pass = this.tbSenha.Text;
            if (this.clienteVO.Cadastro == null)
            {
                this.clienteVO.CadastradoPor = this.tbUser.Text;
                this.clienteVO.Cadastro = DateTime.Now;
            }
            this.clienteVO.EditadoPor = this.tbUser.Text;
            this.clienteVO.Edicao = DateTime.Now;

            bool novoCadastro = (this.clienteVO.IdCliente == 0);
            cBO.SalvarCliente(this.clienteVO, novoCadastro);

            this.Session["customerActive"] = this.clienteVO;

            this.PanelRegiao.Visible = false;
            this.PanelPF.Visible = false;
            this.PanelPJ.Visible = false;
            this.PanelUsuario.Visible = false;
            this.PanelOK.Visible = true;


            try
            {
                sendEmail(this.clienteVO, novoCadastro, pf);
            }
            catch (Exception ex)
            {
            }
            return;
        }


        protected void sendEmail(cliente clienteVO, bool novoCadastro, bool pf)
        {
            MailMessage oEmail = new MailMessage();
            MailAddress sDe = new MailAddress(ConfigurationManager.AppSettings["Email.Administrador"]);

            oEmail.To.Add(ConfigurationManager.AppSettings["Email.SAC"]);
            oEmail.From = sDe;
            oEmail.Priority = MailPriority.Normal;
            oEmail.IsBodyHtml = false;
            oEmail.Subject = "Cadastro de Cliente - Site www.deoplasticos.com.br";
            oEmail.Body = "O cliente abaixo " + (novoCadastro ? "se cadastrou" : "atualizou o seu cadastro") + " no site:\n\n" +
                          "Tipo: Pessoa " + (pf?"Fisica":"Juridica") + "\n" +
                          "Codigo: " + clienteVO.IdCliente.ToString()+ "\n" +
                          "Nome: "+clienteVO.Nome + "\n" +
                          "Sobrenome: "+clienteVO.Sobrenome  + "\n" +
                          "Nome PJ: "+clienteVO.NomePJ + "\n" +
                          "Dt Nasc: "+clienteVO.Nasc.Value.ToString("dd/MM/yyyy") + "\n" +
                          "Sexo: "+clienteVO.Sexo + "\n" +
                          "CNPJ: "+clienteVO.CNPJ + "\n" +
                          "CPF: "+clienteVO.CPF + "\n" +
                          "RG: "+clienteVO.RG + "\n" +
                          "Email: "+clienteVO.Email + "\n" +
                          "Endereço: "+clienteVO.Endereco + "\n" +
                          "Numero: "+clienteVO.EnderNum + "\n" +
                          "Complemento: "+clienteVO.EnderCompl + "\n" +
                          "Bairro: "+clienteVO.Bairro + "\n" +
                          "Cidade: "+clienteVO.Cidade + "\n" +
                          "Estado: "+clienteVO.Estado + "\n" +
                          "CEP: "+clienteVO.CEP + "\n" +
                          "Fone Cel: "+clienteVO.FoneCel  + "\n" +
                          "Fone Coml: "+clienteVO.FoneComl + "\n" +
                          "Fone Res: "+clienteVO.FoneRes  + "\n" +
                          "Usuario Site: "+clienteVO.User + "\n" +
                          "Quer Mala Direta?: "+(clienteVO.MalaDireta.Value?"Sim":"Nao") +"\n\n" +
                          "*Este email foi enviado automaticamente pelo site em " + DateTime.Now.ToString();

            SmtpClient oEnviar = new SmtpClient();
            oEnviar.Host = ConfigurationManager.AppSettings["Email.Host.SMTP"];
            oEnviar.Port = int.Parse(ConfigurationManager.AppSettings["Email.Host.SMTP.Port"]);
            oEnviar.Credentials = new NetworkCredential(
                                            ConfigurationManager.AppSettings["Email.Administrador"],
                                            ConfigurationManager.AppSettings["Email.Administrador.Pass"]);
            oEnviar.Send(oEmail);
            oEmail.Dispose();
        }
    }
}
